Satcom.man
This is satcom.man as it appeared on 1/12/2018. ::::::::::::::::::::::::::::::::::::::::::::::::::::::::: :: :: :: This document is property of: :: :: :: :: |\\ || /\ ________ /\ :: :: ||\\ || //\\ / _______> //\\ :: :: || \\ || // \\ | <_______ // \\ :: :: || \\ || //____\\ \_______ \ //____\\ :: :: || \\|| //______\\ _______> | //______\\ :: :: || \\| // \\ <________/ // \\ :: :: :: :: The National Aeronautics & Space Administration :: :: :: ::::::::::::::::::::::::::::::::::::::::::::::::::::::::: Author: QuantX [ Figure 1: Flow of establishing a link ] 1. Find the coordinates of a suitable Communications Satellite 2. Confirm the coordinates of both desired Ground Stations 3. Connect to the Origin Ground Station 4. Calculate the Azimuth and Elevation to the Satellite 5. Adjust the Ground Station to acquire the Satellite 6. Connect to the Satellite 7. Calculate the Azimuth and Elevation to the Target Ground Station 8. Adjust the Satellite to acquire the Target Ground Station 9. A link should automatically establish and can be used normaly [ Subject 1: Finding a Ground Station ] Satellite communication relays allow users to create their own links between hosts. These links are one way and can be made between any two Hosts equiped with Ground Stations. The following Hosts are equiped with ground stations: hosts with 'NASA' or 'university' in their descriptions, and military hosts with the '.af' suffix in their name. A special program will be needed to connnect to and operate the dish itself. [ Figure 2: Ground to Orbit Communication ] Satellite +---+ ------[ ]------ +-+-+ _|_ / \ __ /| / / / \ / \ \ \ / |\/ | \ | \ | _|_ Transciever [ Subject 2: Acquiring a satellite ] Any satellite dishes' physical location can be described with a 3 component coordinate ( x, y, z ). Ground Station dishes point at the sky, Satellite dishes point at the ground. To acquire a Satellite utilizing a Ground Station, the correct azmiuth and elevation must be known. The elevation and azimuth can be calculated with the coordinates of both dishes. The azimuth and elevation are expresed in degrees utilizing a floating point variable. Both the azimuth and the elevation must be accurate to within 0.5 degrees. [ Subject 3: Calculating Azimuth ] The Azimuth (in degrees) can be found by utilizing the following formula: Let the coordiantes of the Origin Dish be: ( Ax, Ay, Az ) Let the coordinates of the Target Dish be: ( Bx, By, Bz ) NOTE: This will be in radians Let K equal: atan2( Bx - Ax, By - Ay ) If K contains a value less than zero, increase the value by: 2 * PI Let the Azimuth equal K * 180 / PI [ Subject 4: Calculating Elevation ] The Elevation (in degrees) can be found by utilizing the following formula: Let the coordiantes of the Origin Dish be: ( Ax, Ay, Az ) Let the coordinates of the Target Dish be: ( Bx, By, Bz ) Let K equal: sqrt( ( Bx - Ax ) ^ 2 + ( By - Ay ) ^ 2 ) Let the Elevation equal: atan( ( Bz - Az ) / K ) * 180 / PI NOTE: The Elevation for a Ground Station must always be positive NOTE: The Elevation for a Satellite is typically negative [ Figure 3: Ground to Ground Relay ] Satellite +---+ ------[ ]------ +-+-+ _|_ / \ __ /| \ / \ / \ / \ \ / _\| / \ \ / \ / / |\/ /| | \ / | | \ / | | | _|_ _|_ Transciever Transciever [ Subject 5: Communicating with a Satellite ] The computer systems embeded in Communication Satellites are rudimentary at best. As such, Satellites accept command strings in the form of two byte hexadecimal followed by an optional four byte parameter, usually in the form of a hex-encoded floating point variable. A Satellite's response typically takes the form of a short hex-encoded ASCII string or a hex-encoded floating point variable. [ Figure 4: Example Established Link ] NOTE: The & symbol denotates that this link is a Satellite connection mimsy$ netstat host organization location ---- ------------ -------- & ames NASA Ames Research Center Moffett Field, CA anagld Analytics, Inc. Columbia, MD aplcen Johns Hopkins University, APL Center Laurel, MD arinc Aeronautical Radio, Inc. Annapolis, MD black-silicon Black Silicon, Fortress Of Computati McLean Virginia [ Documentation 1: Example Satellite Command String ] Bad command strings: COMMAND> 31 b8 97 a0 87 Too many bytes: COMMAND> 31b897a0878306cc1949 Good command strings: Execute command #49: COMMAND> 31 Execute command #49 (with optional parameter) COMMAND> 31b897a087 Execute command #49 (with optional parameter) spaces between values COMMAND> 31 b8 97 a0 87 [ Documentation 2: Typical Satellite Commands ] The following commands are generic to all Communications Satellites. NOTE: The * denotates that this command must be followed by a four byte parameter, usually a floating point variable. NOTE: The contents of "" are hex-encoded ASCII literal strings. NOTE: Entering an invalid command returns the error: "BAD_CMD" NOTE: Failing to supply a parameter returns the error: "NO_PARAM" NOTE: Unnecessary parameters are ignored 00 : Request: The name of the Satellite Response: Hex-encoded ASCII string 01 : Request: The X Coordinate of the Satellite Response: Hex-encoded floating point variable 02 : Request: The Y Coordinate of the Satellite Response: Hex-encoded floating point variable 03 : Request: The Z Coordinate of the Satellite Response: Hex-encoded floating point variable 04 : Request: The Azimuth of the Satellite's dish Response: Hex-encoded floating point variable 05 : Request: The Elevation of the Satellite's dish Response: Hex-encoded floating point variable 06 : Request: The name of the Host the Satellite's dish is pointed at Error, the Satellite failed to detect a host: "NO_RESPONSE" Response: Hex-encoded ASCII string 07 : Request: Close the connection to the Satellite Response: "DISCONNECT" 08* : Request: Change the Azimuth of the Satellite's dish Error, parameter is less than 0 degrees or greater than 360 : "BAD_ANGLE" Error, parameter was not a floating point variable: "NOT_FLOAT" Response: "SUCCESS" 09* : Request: Change the Elevation of the Satellite's dish Error, parameter is less than -90 degrees or greater than 90 : "BAD_ANGLE" Error, parameter was not a floating point variable: "NOT_FLOAT" Response: "SUCCESS"